特定平台说明

以下是安装具有OpenMP支持的C / C ++编译器的说明,可为每个受到支持的平台安装scikit-learn的Cython扩展。

Windows

首先,安装Visual Studio 2019构建工具(Build Tools for Visual Studio 2019)。

警告:

不需要安装Visual Studio2019。您仅需要安装“所有下载(All downloads)”->“ Visual Studio 2019工具(Tools for Visual Studio 2019)”下的“ Visual Studio 2019构建工具(Build Tools for Visual Studio 2019)”这一程序即可。

其次,确定您运行的是64位还是32位Python。build命令取决于Python解释器的体系结构。您可以通过在cmdpowershell 控制台中运行以下命令来检查Python解析器的体系结构:

python -c "import struct; print(struct.calcsize('P') * 8)"

对于64位Python,可以使用以下命令构建和配置环境:

SET DISTUTILS_USE_SDK=1
"C:\Program Files (x86)\Microsoft Visual Studio\2019\BuildTools\VC\Auxiliary\Build\vcvarsall.bat" x64

如果是32位Python的话,把x64更换为x86

请注意,上面的路径可能因用户而不同。上面的路径是要指向“ vcvarsall.bat”文件,该文件将在当前命令提示符窗口下设置必要的环境变量。

最后,输入以下命令来构建scikit-learn:

pip install --verbose --editable .

mac操作系统(OS)

mac操作系统(OS)上默认C编译器Apple clang(容易混淆的别名是 /usr/bin/gcc)不直接支持OpenMP。我们提供了两种替代方法来开启OpenMP支持:

  • 用conda 安装conda-forge::compilers
  • 用Homebrew安装libomp以扩展默认的Apple clang编译器。

来自conda-forge的mac操作系统(OS) 编译器

如果使用conda包管理器(版本> = 4.7)的话,则可以在conda-forge中安装compilers的元包(meta-package),conda-forge提供基于llvm工具链的由OpenMP启动的C / C ++编译器。

首先安装mac操作系统(OS)命令行工具:

xcode-select --install

建议使用专门的conda环境,从源代码开始构建scikit-learn:

conda create -n sklearn-dev python numpy scipy cython joblib pytest \
    conda-forge::compilers conda-forge::llvm-openmp
conda activate sklearn-dev
make clean
pip install --verbose --editable .

注意:

如果收到任何依赖冲突的错误消息的话,请尝试注释掉$HOME/.condarc文件中的任何自定义conda配置。特别是该指令channel_priority: strict会导致此问题的出现。

您可以使用以下命令来检查在conda forge中是否已经正确安装自定义的编译器:

conda list compilers llvm-openmp

编译器元包(meta-package)将自动设置自定义环境变量:

echo $CC
echo $CXX
echo $CFLAGS
echo $CXXFLAGS
echo $LDFLAGS

这些自定义环境变量指向您的sklearn-devconda环境中的文件和文件夹(尤其是在bin/,include/和lib/路径下的子文件夹)。例如 -L/path/to/conda/envs/sklearn-dev/lib应该包括在LDFLAGS变量中。

在日志中,您应该可以看到正在由clang和clang++编译器构建的编译扩展程序。该编译器是由conda中的-fopenmp命令行标志安装的。

来自Homebrew的mac操作系统(OS) 编译器

另一个解决方法是为mac操作系统(OS)上默认的clang编译器开启OpenMP支持。

首先安装mac操作系统(OS)命令行工具:

xcode-select --install

安装在mac操作系统(OS)上适用的Homebrew包管理器。

安装LLVM OpenMP库:

brew install libomp

设置以下环境变量:

export CC=/usr/bin/clang
export CXX=/usr/bin/clang++
export CPPFLAGS="$CPPFLAGS -Xpreprocessor -fopenmp"
export CFLAGS="$CFLAGS -I/usr/local/opt/libomp/include"
export CXXFLAGS="$CXXFLAGS -I/usr/local/opt/libomp/include"
export LDFLAGS="$LDFLAGS -Wl,-rpath,/usr/local/opt/libomp/lib -L/usr/local/opt/libomp/lib -lomp"

最后,以详细模式构建scikit-learn(以详细模式构建scikit-learn是为了检查-fopenmp编译器命令标志是否存在 ):

make clean
pip install --verbose --editable .

Linux

系统的Linux编译器

在不使用conda的情况下,从源代码安装scikit-learn要求您已安装scikit-learn的Python开发头文件(development headers)和具有OpenMP支持的C / C ++编译器(通常为GCC工具链)。

为基于Debian的操作系统(例如Ubuntu)安装依赖:

sudo apt-get install build-essential python3-dev python3-pip

然后运行:

pip3 install cython
pip3 install --verbose --editable .

Cython和预编译wheels运行时所需要的依赖(numpy,scipy和joblib)应自动安装在$HOME/.local/lib/pythonX.Y/site-packages中 。或者,您可以从virtualenvconda环境中运行上述命令,来从系统打包程序(system packager)安装的Python包中获得一个全新的独立环境。当使用独立环境时,在上述命令中的pip3应替换为pip

如果您的体系结构(例如ARM)无法使用预编译wheels所需的运行时依赖的话,可以安装系统版本:

sudo apt-get install cython3 python3-numpy python3-scipy

在Red Hat和克隆(例如CentOS)上,使用以下命令安装依赖:

sudo yum -y install gcc gcc-c++ python3-devel numpy scipy

来自conda-forge的Linux编译器

您可以使用conda在用户文件夹中安装GNU的C编译器工具链(GCC)的最新版本。

conda create -n sklearn-dev numpy scipy joblib cython conda-forge::compilers
conda activate sklearn-dev
pip install --verbose --editable .

FreeBSD

FreeBSD的12.0和11.2系统中的clang编译器不包含OpenMP支持。您需要从软件包(或端口)安装openmp库:

sudo pkg install openmp

这将在/usr/local/include 中安装头文件,在/usr/local/lib中安装所需要的依赖库。由于默认情况下不会搜索到这些目录,因此可以把以下路径配置在环境变量中:

export CFLAGS="$CFLAGS -I/usr/local/include"
export CXXFLAGS="$CXXFLAGS -I/usr/local/include"
export LDFLAGS="$LDFLAGS -Wl,-rpath,/usr/local/lib -L/usr/local/lib -lomp"

最后,使用标准命令构建软件包:

pip install --verbose --editable .

对于即将发布的FreeBSD 12.1和11.3版本来说,由于系统中包含OpenMP支持,所以不需要这些步骤。

©2007-2019,scikit-learn开发人员(BSD许可证)。 显示此页面源码